/**
 * 错误处理工具
 */

/**
 * 全局错误处理器
 */
export const setupErrorHandler = () => {
  // 捕获未处理的Promise错误
  window.addEventListener('unhandledrejection', (event) => {
    console.error('未处理的Promise错误:', event.reason);
    
    // 过滤掉浏览器扩展相关的错误
    if (isExtensionError(event.reason)) {
      console.warn('检测到浏览器扩展错误，已忽略:', event.reason);
      event.preventDefault(); // 阻止错误冒泡
      return;
    }
    
    // 处理其他错误
    handleError(event.reason);
  });

  // 捕获全局JavaScript错误
  window.addEventListener('error', (event) => {
    console.error('全局JavaScript错误:', event.error);
    
    if (isExtensionError(event.error)) {
      console.warn('检测到浏览器扩展错误，已忽略:', event.error);
      return;
    }
    
    handleError(event.error);
  });
};

/**
 * 判断是否为浏览器扩展错误
 * @param {Error} error - 错误对象
 * @returns {boolean} 是否为扩展错误
 */
const isExtensionError = (error) => {
  if (!error) return false;
  
  const errorString = error.toString();
  const stack = error.stack || '';
  
  // 检查错误来源是否为浏览器扩展
  const extensionIndicators = [
    'background.js',
    'content_script',
    'extension://',
    'chrome-extension://',
    'moz-extension://',
    'safari-extension://',
    'writing/get_template_list', // 特定的错误路径
    'permission error',
    'exceptions.UserAuthError'
  ];
  
  return extensionIndicators.some(indicator => 
    errorString.includes(indicator) || stack.includes(indicator)
  );
};

/**
 * 处理应用错误
 * @param {Error} error - 错误对象
 */
const handleError = (error) => {
  console.error('应用错误:', error);
  
  // 可以在这里添加错误上报逻辑
  // 例如发送到错误监控服务
  
  // 显示用户友好的错误信息
  showUserFriendlyError(error);
};

/**
 * 显示用户友好的错误信息
 * @param {Error} error - 错误对象
 */
const showUserFriendlyError = (error) => {
  // 创建错误提示元素
  const errorDiv = document.createElement('div');
  errorDiv.style.cssText = `
    position: fixed;
    top: 20px;
    right: 20px;
    background: #ff6b6b;
    color: white;
    padding: 15px 20px;
    border-radius: 5px;
    box-shadow: 0 2px 10px rgba(0,0,0,0.2);
    z-index: 10000;
    max-width: 300px;
    font-family: Arial, sans-serif;
  `;
  
  errorDiv.innerHTML = `
    <div style="font-weight: bold; margin-bottom: 5px;">⚠️ 应用错误</div>
    <div style="font-size: 14px;">${getErrorMessage(error)}</div>
    <button onclick="this.parentElement.remove()" style="
      background: none;
      border: none;
      color: white;
      float: right;
      cursor: pointer;
      font-size: 18px;
      margin-top: 5px;
    ">×</button>
  `;
  
  document.body.appendChild(errorDiv);
  
  // 5秒后自动移除
  setTimeout(() => {
    if (errorDiv.parentElement) {
      errorDiv.remove();
    }
  }, 5000);
};

/**
 * 获取用户友好的错误信息
 * @param {Error} error - 错误对象
 * @returns {string} 错误信息
 */
const getErrorMessage = (error) => {
  if (!error) return '未知错误';
  
  // 根据错误类型返回不同的信息
  if (error.code === 403) {
    return '权限不足，请检查您的访问权限';
  }
  
  if (error.message && error.message.includes('network')) {
    return '网络连接异常，请检查网络设置';
  }
  
  if (error.message && error.message.includes('timeout')) {
    return '请求超时，请稍后重试';
  }
  
  return error.message || '发生了未知错误';
};

/**
 * 路由错误处理
 * @param {Error} error - 路由错误
 */
export const handleRouteError = (error) => {
  console.error('路由错误:', error);
  
  // 如果是404错误，显示友好提示
  if (error.status === 404) {
    console.log('页面不存在，将显示404页面');
    return;
  }
  
  // 其他路由错误
  handleError(error);
};

/**
 * API错误处理
 * @param {Error} error - API错误
 */
export const handleApiError = (error) => {
  console.error('API错误:', error);
  
  // 过滤扩展错误
  if (isExtensionError(error)) {
    console.warn('API错误来自浏览器扩展，已忽略');
    return;
  }
  
  handleError(error);
};
